import java.util.Scanner;
/*
* 给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。
* 最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
* 你可以假设除了整数 0 之外，这个整数不会以零开头。
* 来源：力扣（LeetCode）
* 链接：https://leetcode-cn.com/problems/plus-one
* 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
* */
public class AddOne {

    public static void main(String[] args) {
        int[] digits={9};
        int[] b=plusOne(digits);
        for(int i=0;i<b.length;i++){
            System.out.print(b[i]);
        }
    }
    /*
    * 总体思路；
    * 1、先判断最后一位是否为9
    *    不等于9 直接加一
    *    等于9 ，逢十进一
    * 2、逢十进一时，需判断前一位是否为9
    *       不等于9，直接加一
    *       等于9，逢十进一
    * 3、循环判断截止
    * */
    public static int[] plusOne(int[] digits) {
        for (int i=digits.length-1;i>=0;i--){
            if (digits[i]!=9){
                digits[i]=digits[i]+1;
                break;
            }else{
                if (digits.length==1 || digits[i]==digits[i-1]){
                    if(digits[0]==9){
                        int[] a=new int[digits.length+1];
                        a[0]=1;
                        return a;
                    }else {
                        int[] a=new int[digits.length];
                        a[0]=digits[0]+1;
                        return a;
                    }

                }
                if (digits[i-1]!=9){
                    digits[i]=0;
                    digits[i-1]=digits[i-1]+1;
                    break;
                }
            }
        }
        return digits;
    }
}
